/**
 * ? 可空类型
 * ! 类型断言
 * 
 */
void main() {
  // 下面这行代码编译错误，name不是可空类型
  // String name = null;

  // 必须要声明可空类型，才能将name赋值为null
  String? name = null;
  print(name);

  print(getName(name));

  // 如果name != null，会打印name的长度，如果name == null，会抛出异常
  print(name!.length);
}

/**
 * 如果返回类型的String后不加'?'，'return null'会编译错误
 * 如果入参类型的String后不加'?'，就没法传null进来（当然可以直接不声明入参类型）
 */
String? getName(String? name) {
  if (name != null) {
    return "name is " + name;
  }
  return null;
}
